package com.cskaoyan.market.listener;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.apache.ibatis.io.Resources;

/**
 * @ClassName AuthenticateListener
 * @Description: TODO
 * @Author 远志 zhangsong@cskaoyan.onaliyun.com
 * @Date 2023/3/21 10:34
 * @Version V1.0
 **/
@WebListener
public class AuthenticateListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 当servletContext对象被创建的时候，会调用该方法
        // 可以在当前方法中读取auth.txt里面的数据，放入context域中
        // 随后在filter中读取该数据即可
        // 文件位于何处？读取该文件的输入流？位于classpath目录下
        try {
            InputStream inputStream = Resources.getResourceAsStream("auth.txt");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            // 这几行代码的作用是读取位于classpath目录下的auth.txt文件里面的内容
            // 因为该文件里面的内容是一行表示一个uri，所以我希望可以简化读取的流程，使用readline方法
            // 读取完毕之后，将uri放入到一个list中，随后将list放入context域中
            String line = null;
            List<String> uris = new ArrayList<>();
            while ((line = bufferedReader.readLine()) != null) {
                uris.add(line);
            }
            sce.getServletContext().setAttribute("uris", uris);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}